Lambda 表达式
1. 概述
Lambda 表达式是 Java 8 引入的一个新特性,它提供了一种简洁的方式来表示匿名函数。Lambda 表达式可以被看作是函数式接口的实例,函数式接口是指只有一个抽象方法的接口。Lambda 表达式的引入使得 Java 在函数式编程方面更加强大和灵活。
2. 基本语法
Lambda 表达式的基本语法如下:
(parameters) -> expression
或
(parameters) -> { statements; }
parameters:参数列表,可以为空或包含一个或多个参数。->:箭头操作符,用于分隔参数和表达式/语句块。expression:单个表达式,表达式的结果将作为 Lambda 表达式的返回值。statements:语句块,可以包含多条语句,语句块必须用花括号{}包围。
3. 示例代码
3.1 无参数的 Lambda 表达式
// 定义一个函数式接口
interface MyFunction {
void execute();
}
public class LambdaExample {
public static void main(String[] args) {
// 使用 Lambda 表达式实现 MyFunction 接口
MyFunction myFunction = () -> System.out.println("Hello, Lambda!");
myFunction.execute(); // 输出: Hello, Lambda!
}
}
3.2 带参数的 Lambda 表达式
// 定义一个函数式接口
interface MathOperation {
int operate(int a, int b);
}
public class LambdaExample {
public static void main(String[] args) {
// 使用 Lambda 表达式实现加法操作
MathOperation addition = (a, b) -> a + b;
System.out.println("10 + 5 = " + addition.operate(10, 5)); // 输出: 10 + 5 = 15
// 使用 Lambda 表达式实现减法操作
MathOperation subtraction = (a, b) -> a - b;
System.out.println("10 - 5 = " + subtraction.operate(10, 5)); // 输出: 10 - 5 = 5
}
}
3.3 带语句块的 Lambda 表达式
// 定义一个函数式接口
interface StringFunction {
String execute(String str);
}
public class LambdaExample {
public static void main(String[] args) {
// 使用 Lambda 表达式实现字符串反转操作
StringFunction reverse = (str) -> {
String result = "";
for (int i = str.length() - 1; i >= 0; i--) {
result += str.charAt(i);
}
return result;
};
System.out.println("Reverse of 'Hello' is " + reverse.execute("Hello")); // 输出: Reverse of 'Hello' is olleH
}
}
4. 实践练习
4.1 练习 1:使用 Lambda 表达式实现排序
编写一个程序,使用 Lambda 表达式对一个整数列表进行排序。
import java.util.Arrays;
import java.util.List;
public class LambdaExercise {
public static void main(String[] args) {
List<Integer> numbers = Arrays.asList(5, 3, 8, 1, 2);
// 使用 Lambda 表达式对列表进行排序
numbers.sort((a, b) -> a - b);
System.out.println(numbers); // 输出: [1, 2, 3, 5, 8]
}
}
4.2 练习 2:使用 Lambda 表达式实现过滤
编写一个程序,使用 Lambda 表达式从一个字符串列表中过滤出长度大于 5 的字符串。
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class LambdaExercise {
public static void main(String[] args) {
List<String> words = Arrays.asList("apple", "banana", "cherry", "date", "elderberry");
// 使用 Lambda 表达式过滤出长度大于 5 的字符串
List<String> filteredWords = words.stream()
.filter(word -> word.length() > 5)
.collect(Collectors.toList());
System.out.println(filteredWords); // 输出: [banana, cherry, elderberry]
}
}
5. 总结
Lambda 表达式是 Java 8 引入的一个重要特性,它使得代码更加简洁和易读。通过 Lambda 表达式,我们可以更方便地实现函数式接口,并在集合操作、排序、过滤等方面发挥重要作用。掌握 Lambda 表达式将为你的 Java 编程带来更多的灵活性和效率。
6. 进阶学习
在掌握了 Lambda 表达式的基础之后,你可以进一步学习以下内容:
- Stream API:与 Lambda 表达式紧密结合,用于处理集合数据。
- 函数式接口:了解 Java 8 中常用的函数式接口,如
Predicate、Consumer、Function等。 - 方法引用:学习如何使用方法引用来简化 Lambda 表达式的编写。
通过不断实践和学习,你将能够更加熟练地运用 Lambda 表达式,提升你的 Java 编程技能。